package com.hncc.kumao.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class CutFileUtils {

    public static void main(String[] args) {
        cutFile("D:/TempDir/temp/jinshan.exe", "D:/TempDir/temp/result", 1024 * 1024 * 10);
        //cutFile("D:/TempDir/test.txt", "D:/TempDir/temp/result", 1024);
    }

    /**
     * 分割文件
     * @param targetFilePath 要分割的文件路径
     * @param outPutDir 分割后的文件存储的路径
     * @param shardSize 单个分片大小
     */
    private static void cutFile(String targetFilePath, String outPutDir, int shardSize) {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(targetFilePath);
            //创建规定大小的byte数组
            byte[] b = new byte[shardSize];
            int len = 0;
            //name为以后的小文件命名做准备
            int name = 1;
            //遍历将大文件读入byte数组中，当byte数组读满后写入对应的小文件中
            while ((len = fis.read(b)) != -1) {
                //分别找到原大文件的文件名和文件类型，为下面的小文件命名做准备
                String savePath = outPutDir + "/" + new File(targetFilePath).getName() + "_" + name + ".fragment";
                FileOutputStream fos = new FileOutputStream(savePath);
                //将byte数组写入对应的小文件中
                fos.write(b, 0, len);
                //结束资源
                fos.close();
                name++;
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fis != null) {
                    fis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
